<?php
namespace app\common;

class RSA1
{

    public function hello($name)
    {

//        $config = array(
//            "digest_alg" => "sha512",
//            "private_key_bits" => 4096,
//            "private_key_type" => OPENSSL_KEYTYPE_RSA,
//        );
//        //创建公钥和私钥
//        $res=openssl_pkey_new($config); #此处512必须不能包含引号。
////提取私钥
//        openssl_pkey_export($res, $private_key);
//
////生成公钥
//        $public_key=openssl_pkey_get_details($res);
//        /*Array
//        (
//            [bits] => 512
//            [key] =>
//            [rsa] =>
//            [type] => 0
//        )*/
//        $public_key=$public_key["key"];
//
////显示数据
//        var_dump($private_key);
//        var_dump($public_key);
//        halt('die');
        $private_key = '-----BEGIN RSA PRIVATE KEY-----  
MIICXQIBAAKBgQC3//sR2tXw0wrC2DySx8vNGlqt3Y7ldU9+LBLI6e1KS5lfc5jl  
TGF7KBTSkCHBM3ouEHWqp1ZJ85iJe59aF5gIB2klBd6h4wrbbHA2XE1sq21ykja/  
Gqx7/IRia3zQfxGv/qEkyGOx+XALVoOlZqDwh76o2n1vP1D+tD3amHsK7QIDAQAB  
AoGBAKH14bMitESqD4PYwODWmy7rrrvyFPEnJJTECLjvKB7IkrVxVDkp1XiJnGKH  
2h5syHQ5qslPSGYJ1M/XkDnGINwaLVHVD3BoKKgKg1bZn7ao5pXT+herqxaVwWs6  
ga63yVSIC8jcODxiuvxJnUMQRLaqoF6aUb/2VWc2T5MDmxLhAkEA3pwGpvXgLiWL  
3h7QLYZLrLrbFRuRN4CYl4UYaAKokkAvZly04Glle8ycgOc2DzL4eiL4l/+x/gaq  
deJU/cHLRQJBANOZY0mEoVkwhU4bScSdnfM6usQowYBEwHYYh/OTv1a3SqcCE1f+  
qbAclCqeNiHajCcDmgYJ53LfIgyv0wCS54kCQAXaPkaHclRkQlAdqUV5IWYyJ25f  
oiq+Y8SgCCs73qixrU1YpJy9yKA/meG9smsl4Oh9IOIGI+zUygh9YdSmEq0CQQC2  
4G3IP2G3lNDRdZIm5NZ7PfnmyRabxk/UgVUWdk47IwTZHFkdhxKfC8QepUhBsAHL  
QjifGXY4eJKUBm3FpDGJAkAFwUxYssiJjvrHwnHFbg0rFkvvY63OSmnRxiL4X6EY  
yI9lblCsyfpl25l7l5zmJrAHn45zAiOoBrWqpM5edu7c  
-----END RSA PRIVATE KEY-----';

//公匙
        $public_key = '-----BEGIN PUBLIC KEY-----  
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC3//sR2tXw0wrC2DySx8vNGlqt  
3Y7ldU9+LBLI6e1KS5lfc5jlTGF7KBTSkCHBM3ouEHWqp1ZJ85iJe59aF5gIB2kl  
Bd6h4wrbbHA2XE1sq21ykja/Gqx7/IRia3zQfxGv/qEkyGOx+XALVoOlZqDwh76o  
2n1vP1D+tD3amHsK7QIDAQAB  
-----END PUBLIC KEY-----';


        $pi_key =  openssl_pkey_get_private($private_key);//这个函数可用来判断私钥是否是可用的，可用返回资源id Resource id
        $pu_key = openssl_pkey_get_public($public_key);//这个函数可用来判断公钥是否是可用的
        //私匙加密公式解密
        $data = 'ThinkPHP5.x/3.2 提问群-小菜鸟';
        echo '加密前字符串 '.$data.'<br/>';
        openssl_private_encrypt($data,$encrypted,$pi_key);//私钥加密
        $encrypted = base64_encode($encrypted);//base64只是为了避免特殊字符
        echo 'RSA私钥加密 '.$encrypted.'<br/>';
        openssl_public_decrypt(base64_decode($encrypted),$decrypted,$pu_key);//私钥加密的内容通过公钥可用解密出来
        echo 'RSA公钥解密 '.$decrypted.'<br/>';
        //公私加密私匙解密
        openssl_public_encrypt($data,$encrypted,$pu_key);//公钥加密
        $encrypted = base64_encode($encrypted);  //base64只是为了避免特殊字符
        echo 'RSA公钥加密 '.$encrypted.'<br/>';
        openssl_private_decrypt(base64_decode($encrypted),$decrypted,$pi_key);//私钥解密
        echo 'RSA私钥解密 '.$decrypted.'<br/>';
    }
}
